//和为零的 N 个不同整数
/*给你一个整数 n，请你返回 任意 一个由 n 个 各不相同 的整数组成的数组，并且这 n 个数相加和为 0 。
1 <= n <= 1000
*/
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* sumZero(int n, int* returnSize) {
    int* arr = (int*)calloc(n, sizeof(int));
    *returnSize = n;
    int left = 0;
    int right = n - 1;
    int a = 1;
    while (left < right) {
        arr[left] = a;
        arr[right] = -a;
        a++;
        left++;
        right--;
    }
    return arr;
}



// 与对应负数同时存在的最大正整数
/*给你一个 不包含 任何零的整数数组 nums ，找出自身与对应的负数都在数组中存在的最大正整数 k 。

返回正整数 k ，如果不存在这样的整数，返回 -1 。
1 <= nums.length <= 1000
-1000 <= nums[i] <= 1000
nums[i] != 0*/
int compar(const void* q1, const void* q2) {
    return (*((int*)(q1)) - *((int*)(q2)));
}
int findMaxK(int* nums, int numsSize) {
    qsort(nums, numsSize, sizeof(int), compar);
    int count = 0;
    while (count<numsSize&&nums[count] < 0) {
        count++;
    }
    int left = 0;
    int right = numsSize - 1;
    while (left < count && right >= count) {
        if (-nums[left] > nums[right]) {
            left++;
        } else if (-nums[left] == nums[right]) {
            return nums[right];
        } else {
            right--;
        }
    }
    return -1;
}

